//hprose rpc网关中间件
/*
* @Author: 窦子滨<zibin_5257@163.com>
* @Date: 2019-05-05 13:18
 */
package main

import (
	"lanfengye/base"
	"lanfengye/base/common"
	"flag"
	"strings"
)

var (
	log base.LogIF
	//etcd服务器地址定义
	//etcdServers=[]string{
	//	"etcd.server.hp:2379",
	//	"etcd1.server.hp:2379",
	//	"etcd2.server.hp:2379",
	//	"etcd3.server.hp:2379",
	//	"etcd4.server.hp:2379",
	//	"etcd5.server.hp:2379",
	//	"etcd6.server.hp:2379",
	//	"etcd7.server.hp:2379",
	//}
	//etcdServers = []string{"127.0.0.1:2379"}
	etcdServers=[]string{"etcd.server.hp:2379"}
)

func init() {
	configPath := common.Path + "configHprose.ini"
	logPath := ""
	parseCmdlineOpt(&configPath, &logPath)
	logPath = common.PathHandle(logPath)
	err := base.NewConfig(Config, configPath)
	if err != nil {
		log.Error("读取配置文件发生错误：[%s]", err.Error())
	}
	if logPath == "" {
		logPath = common.PathHandle(Config.Log.File)
	}

	log = base.NewLog(logPath, 0, true)
	//log.SetLogger("console", "")
	log.EnableFuncCallDepth(true)

	log.Debug("配置文件读取内容：[%+v]", Config)
	initManualList()
	initMappingList()
	initEtcdServerList()
	initEtcd()
}

//初始化手动配置列表
func initManualList() {
	//if !Config.Manual.Switch{
	//	return
	//}
	s, err := common.ReadFileInto(common.PathHandle(Config.Manual.File))
	if err != nil {
		log.Debug("读取手动微服务列表错误：[%s]", err.Error())
		return
	}

	log.Debug("读取到手动配置微服务列表：[%+v]", s)
	for _, v := range s {
		list := strings.Split(v, "|")
		if len(list) != 2 {
			continue
		}
		url := strings.Split(list[1], ",")
		_ = manualList.Add(list[0], url)
	}
	return
}

//初始化手动映射列表
func initMappingList() {
	//if !Config.Mapping.Switch{
	//	return
	//}
	s, err := common.ReadFileInto(common.PathHandle(Config.Mapping.File))
	if err != nil {
		log.Debug("读取映射列表错误信息：[%s]", err)
	}
	log.Debug("读取到的映射列表：[%+v]", s)

	for _, v := range s {
		list := strings.Split(v, "=")
		if len(list) != 2 {
			continue
		}
		Mapping.Add(list[0], list[1])
	}
	return
}

//初始化etcd server列表
func initEtcdServerList() {
	s, err := common.ReadFileInto(Config.Etcd.File)

	log.Info("EtcdFile Path:[%s]",common.PathHandle(Config.Etcd.File))

	if err != nil {
		log.Debug("读取etcd服务器列表错误信息：[%s]", err)
	}
	log.Debug("读取etcd服务器列表：[%+v]", s)
	if len(s) > 0 {
		etcdServers = s
	}
	return
}

func parseCmdlineOpt(configPath *string, logPath *string) {
	flag.StringVar(configPath, "config", *configPath, "配置文件路径")
	flag.StringVar(logPath, "log", *logPath, "日志文件路径")
	flag.Parse()
}
